"""
如果使用Redis提供高速缓存服务，主要是把项目中热数据放到Redis中
热数据指的是：体量不大，但是访问频率极高的数据，这类数据通常还不怎么变动

base64 ---> 编码/解码 ---> b64encode / b64decode

hashlib ---> md5 / sha1 / sha256 ---> 摘要 / 签名

pycrypto （三方库）---> aes（对称加密） / rsa（非对称加密） ---> 加密

序列化（serialize）：对象变成字符串或字节串（串行化/腌咸菜/冻结对象） ---> json.dumps / pickle.dumps
反序列化（deserialize）：把字符串或字节串还原成对象（反串行化/对象解冻）---> json.loads / pickle.loads
"""
import base64
import pickle

import MySQLdb
import redis

client = redis.Redis(host='47.104.31.138', port=5489, password='Luohao.618')
data = client.get('example09:depts')
if data:
    results = pickle.loads(base64.b64decode(data))
else:
    conn = MySQLdb.connect(host='47.104.31.138', port=3306,
                           user='root', password='123456',
                           database='hrs', charset='utf8')
    try:
        with conn.cursor(MySQLdb.cursors.DictCursor) as cursor:
            cursor.execute(
                'select dno as no, dname as name, dloc as location from tb_dept'
            )
            results = cursor.fetchall()
            data = pickle.dumps(results)
            client.set('example09:depts', base64.b64encode(data))
    except MySQLdb.MySQLError as err:
        print(err)
    finally:
        conn.close()
for data_dict in results:
    print(data_dict)
